From 5e7949c47b520941e47ea0312c6eb80cee7038b9 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 27 Oct 2012 02:23:23 +0200 Subject: [PATCH] themingbackground: Use get_box() for background image size --- gtk/gtkthemingbackground.c | 55 +++++++------------------------------- 1 file changed, 10 insertions(+), 45 deletions(-) diff --git a/gtk/gtkthemingbackground.c b/gtk/gtkthemingbackground.c index cd29de5a6d..650516c178 100644 --- a/gtk/gtkthemingbackground.c +++ b/gtk/gtkthemingbackground.c @@ -43,49 +43,9 @@ #include "fallback-c89.c" typedef struct { - cairo_rectangle_t image_rect; - gint idx; } GtkThemingBackgroundLayer; -static void -_gtk_theming_background_layer_apply_origin (GtkThemingBackground *bg, - GtkThemingBackgroundLayer *layer) -{ - cairo_rectangle_t image_rect; - GtkCssValue *value = _gtk_style_context_peek_property (bg->context, GTK_CSS_PROPERTY_BACKGROUND_ORIGIN); - GtkCssArea origin = _gtk_css_area_value_get (_gtk_css_array_value_get_nth (value, layer->idx)); - - /* The default size of the background image depends on the - background-origin value as this affects the top left - and the bottom right corners. */ - switch (origin) { - case GTK_CSS_AREA_BORDER_BOX: - image_rect.x = 0; - image_rect.y = 0; - image_rect.width = bg->paint_area.width; - image_rect.height = bg->paint_area.height; - break; - case GTK_CSS_AREA_CONTENT_BOX: - image_rect.x = bg->border.left + bg->padding.left; - image_rect.y = bg->border.top + bg->padding.top; - image_rect.width = bg->paint_area.width - bg->border.left - bg->border.right - bg->padding.left - bg->padding.right; - image_rect.height = bg->paint_area.height - bg->border.top - bg->border.bottom - bg->padding.top - bg->padding.bottom; - break; - case GTK_CSS_AREA_PADDING_BOX: - default: - image_rect.x = bg->border.left; - image_rect.y = bg->border.top; - image_rect.width = bg->paint_area.width - bg->border.left - bg->border.right; - image_rect.height = bg->paint_area.height - bg->border.top - bg->border.bottom; - break; - } - - /* XXX: image_rect might have negative width/height here. - * Do we need to do something about it? */ - layer->image_rect = image_rect; -} - static const GtkRoundedBox * gtk_theming_background_get_box (GtkThemingBackground *bg, GtkCssArea area) @@ -132,6 +92,7 @@ _gtk_theming_background_paint_layer (GtkThemingBackground *bg, GtkCssRepeatStyle hrepeat, vrepeat; const GtkCssValue *pos, *repeat; GtkCssImage *image; + const GtkRoundedBox *origin; double image_width, image_height; double width, height; @@ -143,8 +104,14 @@ _gtk_theming_background_paint_layer (GtkThemingBackground *bg, _gtk_css_array_value_get_nth ( _gtk_style_context_peek_property (bg->context, GTK_CSS_PROPERTY_BACKGROUND_IMAGE), layer->idx)); - width = layer->image_rect.width; - height = layer->image_rect.height; + origin = gtk_theming_background_get_box ( + bg, + _gtk_css_area_value_get ( + _gtk_css_array_value_get_nth ( + _gtk_style_context_peek_property (bg->context, GTK_CSS_PROPERTY_BACKGROUND_ORIGIN), + layer->idx))); + width = origin->box.width; + height = origin->box.height; if (image == NULL || width <= 0 || height <= 0) return; @@ -179,7 +146,7 @@ _gtk_theming_background_paint_layer (GtkThemingBackground *bg, cairo_clip (cr); - cairo_translate (cr, layer->image_rect.x, layer->image_rect.y); + cairo_translate (cr, origin->box.x, origin->box.y); if (hrepeat == GTK_CSS_REPEAT_STYLE_NO_REPEAT && vrepeat == GTK_CSS_REPEAT_STYLE_NO_REPEAT) { @@ -315,8 +282,6 @@ _gtk_theming_background_init_layer (GtkThemingBackground *bg, gint idx) { layer->idx = idx; - - _gtk_theming_background_layer_apply_origin (bg, layer); } static void -- 2.30.2